Лабораторные работы / отчёт 13
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
“ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ”
Кафедра “Информатика и вычислительная техника”
ОТЧЕТ
по лабораторной работе №13
“МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ”
Выполнил:
Студент группы ИВТ-234 Бектимиров А.Е.
_____________________________________________________
(дата, подпись)
Проверил:
ст. пр. доцент Дорошенко М.С.
_____________________________________________________
(дата, подпись)
Омск 2024
Лабораторная работа №13
Тема: Модульное программирование
Вариант 2
Задание 1
Условие задачи:
Для задачи 8_2 разработать программу, скрыв подпрограммы в отдельном файле (модуле), использовать ссылки на переменные, объявленные в другом модуле.
Текст программы:
#include <iostream>
#include <iomanip>
#include "Print.h"
#include "Fill.h"
#include "Vec.h"
int main() {
const int LEN = 6;
int** first = new int* [LEN];
int** second = new int* [LEN];
for (int i = 0; i < LEN; i++) {
first[i] = new int[LEN];
second[i] = new int[LEN];
}
fill(first, LEN);
fill(second, LEN);
if (vec(first, LEN) > vec(second, LEN)) print(first, LEN);
else print(second, LEN);
}
#pragma once
void print(int** target, int size);
#include "Print.h"
#include <iostream>
#include <iomanip>
void print(int** target, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
std::cout << std::setw(3) << target[i][j] << " ";
}
std::cout << std::endl;
}
}
#pragma once
void fill(int** target, int LEN);
#include "Fill.h"
#include <random>
void fill(int** target, int LEN) {
for (int i = 0; i < LEN; i++) {
for (int j = 0; j < LEN; j++) {
target[i][j] = rand() % 21 - 10;
}
}
}
#pragma once
int vec(int** target, int size);
#include "Vec.h"
int vec(int** target, int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += target[i][i];
}
return sum;
}
Результаты выполнения программы, выводы:
Задание 2
Условие задачи:
Для задачи 9_2 разработать программу, скрыв подпрограммы в отдельном файле (модуле), использовать ссылки на переменные, объявленные в другом модуле.
Текст программы:
#include <iostream>
#include <iomanip>
#include "Func.h"
#include "Print.h"
#include "Fill.h"
int main() {
setlocale(LC_ALL, "rus");
int A[5], B[6];
fill(A, 5);
std::cout << "Массив А: ";
print(A, 5);
fill(B, 6);
std::cout << "\nМассив В: ";
print(B, 6);
int answer_one, answer_two;
std::cout << "\n\nВыпавшие значения первого массива: ";
answer_one = func(A, 5, &answer_two);
std::cout << answer_one << " " << answer_two;
std::cout << "\nВыпавшие значения второго массива: ";
answer_one = func(B, 6, &answer_two);
std::cout << answer_one << " " << answer_two;
return 0;
}
#pragma once
int func(int* target, int size, int* answer_two);
#include "Func.h"
int func(int* target, int size, int* answer_two) {
int answer_one = target[size - 2];
*answer_two = target[size - 1];
return answer_one;
}
#pragma once
void print(int* target, int size);
#include "Print.h"
#include <iostream>
#include <iomanip>
void print(int* target, int size) {
for (int i = 0; i < size; i++) {
std::cout << std::setw(3) << target[i] << " ";
}
}
#pragma once
void fill(int* target, int size);
#include "Fill.h"
#include <random>
void fill(int* target, int size) {
for (int i = 0; i < size; i++) {
target[i] = rand() % 21 - 10;
}
}
Результаты выполнения программы, выводы:
Задание 3
Условие задачи:
Даны две матрицы целых чисел M [1..3,0..1], К [1..3,0..2]. Найти средние арифметические значения для каждой из них и индексы ближайших к ним чисел.
Схема алгоритма:
Текст программы:
#include <iostream>
#include "CalculateAverage.h"
using namespace std;
int main() {
setlocale(LC_ALL, "RUS");
int M[3][2] = { {1, 2}, {3, 4}, {5, 6} };
int K[3][2] = { {7, 8}, {10, 11}, {13, 14} };
double averageM, averageK;
int indexIM, indexJM, indexIK, indexJK;
calculateAverage(M, averageM, indexIM, indexJM);
calculateAverage(K, averageK, indexIK, indexJK);
cout << "Среднее значение для матрицы M: " << averageM << ", самое близкое значение по индексу [" << indexIM << "][" << indexJM << "]" << endl;
cout << "Среднее значение для матрицы K: " << averageK << ", самое близкое значение по индексу [" << indexIK << "][" << indexJK << "]" << endl;
return 0;
}
#pragma once
void calculateAverage(int mat[3][2], double& average, int& indexI, int& indexJ);
#include "CalculateAverage.h"
#include <cmath>
const int rowsM = 3;
const int colsM = 2;
const int rowsK = 3;
const int colsK = 2;
void calculateAverage(int mat[3][2], double& average, int& indexI, int& indexJ) {
double sum = 0.0;
for (int i = 0; i < rowsM; i++) {
for (int j = 0; j < colsM; j++) {
sum += mat[i][j];
}
}
average = sum / (rowsM * colsM);
double minDiff = INT_MAX;
for (int i = 0; i < rowsM; i++) {
for (int j = 0; j < colsM; j++) {
if (abs(mat[i][j] - average) < minDiff) {
minDiff = abs(mat[i][j] - average);
indexI = i;
indexJ = j;
}
}
}
}
Результаты выполнения программы, выводы: